/*
 * Copyright (C) 2017 Pingan, Inc. All Rights Reserved.
 */
package com.pingan.haofang.searchcloud.api;

import com.pingan.haofang.searchcloud.api.index.EngineTypeDefinition;
import com.pingan.haofang.searchcloud.api.matedata.CollectionMetaData;

import java.util.List;
import java.util.Map;

/**
 * Collection 管理接口
 *
 * @author huhailiang937
 * @date 2017年4月6日下午9:07:25
 * @since 1.0.0
 */
public interface CollectionManagerService extends EngineTypeDefinition {

    /**
     * 列举solr中所有的Collection元数据
     *
     * @return
     * @throws Exception
     */
    @Deprecated
    List<CollectionMetaData> list(String clusterHost) throws Exception;

    /**
     * 根据Collection名称获取元数据
     *
     * @param collectionName
     * @return
     * @throws Exception
     */
    @Deprecated
    CollectionMetaData get(String clusterHost, String collectionName) throws Exception;

    /**
     * 创建一个CollectionMetaData元数据
     *
     * @param solrCollection
     * @return
     * @throws Exception
     */
    boolean create(String clusterHost, CollectionMetaData solrCollection) throws Exception;

    /**
     * 根据collectionName删除
     *
     * @param collectionName
     * @return
     * @throws Exception
     */
    boolean delete(String clusterHost, String collectionName) throws Exception;

    /**
     * 获取所有collectionNames
     *
     * @param clusterHost
     * @return
     */
    List<String> getAllCollectionNames(String clusterHost) throws Exception;

    /**
     * 获取所有collection 的详细信息
     *
     * @param clusterHost 集群host
     * @param list        存放所有的collection的分片副本信息
     * @return map.key:索引名字，map.value:{@link CollectionSummaryDto}
     * @throws Exception
     */
    Map<String, CollectionSummaryDto> getAllCollectionSummary(String clusterHost, List<CollectionMetaData> list) throws Exception;

    /**
     * 获取集群中的存活的节点
     *
     * @param clusterHost 集群host
     * @return
     */
    List<String> getLiveHostUrl(String clusterHost);

    /**
     * 获取集群中节点的统计信息
     *
     * @param clusterHost 集群host
     * @return
     */
    Map<String, DiskConditonDTO> getNodesSummary(String clusterHost) throws Exception;
}
